Warning and error messages due to #pragmas in SunOS 4.0 header files

The C compiler occasionally issues warning messages such as the following when compiling the output of the AT&T C++ Translator (both R2.0 and R2.1) under SunOS 4.0:

"/usr/include/CC/sys/signal.h", line 38: warning: function name expected

This is because C++ doesn't understand the #pragma directives it encounters in some system header files, so it just passes them through to the C compiler. The warning message results because C++ eliminates or moves the C function declarations that the pragma references. Another problem is that the C++ header files use #define to temporarily rename system functions when they include the vendor's C header files as a way to hide the effects of the vendor's C declarations for these functions. Unfortunately, this garbles the function names in the #pragma directives also.

Under R2.0, the #pragma problem just results in warning messages, but under R2.1, the C compilation occasionally fails with an error message. We manually made a new, self-contained version of /usr/include/CC/setjmp.h with the following pragma at the end:

/*

* Routines that call setjmp have strange control flow graphs,

* since a call to a routine that calls resume/longjmp will eventually

* return at the setjmp site, not the original call site. This

* utterly wrecks control flow analysis.

*/

#pragma unknown_control_flow(sigsetjmp, setjmp, _setjmp)

This eliminates the error messages, but not the warning messages. It would probably be no worse to simply remove the #pragmas altogether, since they don't seem to be having the intended effect, and that would eliminate the warning messages also.